# role.py
from agent import Agent
from debate_recorder import DebateRecorder
from llm_integration import LLMIntegration


class Role(Agent):
    def __init__(self, name, recorder, llm: LLMIntegration = None):
        super().__init__(name, recorder)
        self.llm = llm

    def interact_with_llm(self, prompt):
        # 这里可调用 LLM 集成模块的方法
        # 为了简化，暂时返回一个占位信息
        if self.llm:
            return self.llm.generate_response(prompt)
        else:
            return "LLM 未初始化"


class Host(Role):
    def __init__(self, name, recorder: DebateRecorder):
        super().__init__(name, recorder)
        self.current_stage = None

    def speak(self, message):
        self.recoder.record(stage=self.current_stage, speaker=self.name, content=message)
        return super().speak(message)

    def start_debate(self, topic):
        """开始辩论赛"""
        self.current_stage = "开始阶段"
        message = f"欢迎同学们参加辩论赛! 今天的辩论题目是{topic},现在辩论开始!"
        return self.speak(message)

    def control_stage(self, stage):
        """控制辩论赛的阶段转换"""
        self.current_stage = stage
        return self.speak(f"现在我们进入辩论赛的{stage}.\n"
                          f" 请双方辩手认真倾听对方观点,每次发言必须有实质性内容,使用具体的数据和案例支持论点.")

    def statr_judge(self):
        return self.speak("所有辩论环节到此结束，现在请裁判员对本场辩论进行点评，并宣布比赛结果!")

    def end_debate(self):
        """结束辩论赛"""
        return self.speak("辩论赛到此结束，感谢参加裁判员，双方队员和幕前幕后的所有工作人员!")


class Judge(Role):
    def __init__(self, name, recorder: DebateRecorder, llm: LLMIntegration = None):
        super().__init__(name, recorder, llm)

    def speak(self, message):
        self.recoder.record(stage="裁判总结和宣判结果", speaker=self.name, content=message)
        return super().speak(message)

    def summarize(self):
        """总结辩论内容"""
        prompt = (
            f"你是一个中文辩论赛的裁判。通过以下的辩论记录，总结分析辩论双方的论述，基于论点的说服力和论证的完整性来评判胜者,"
            f"最终判定一方胜利，尽最大可能分出胜负，如若双方确实旗鼓相当，可以审慎考虑判定双方为平手。辩论记录: {self.recoder.summarize_records()}")
        summary = self.interact_with_llm(prompt)
        self.recoder.record(stage="裁判总结和宣判结果", speaker=self.name, content=summary)
        return self.speak(summary)


class Debater(Role):
    def __init__(self, name, side, recorder: DebateRecorder, topic, prompt="", position="", is_person=False,
                 llm: LLMIntegration = None):
        super().__init__(name, recorder, llm)
        self.side = side
        self.position = position
        self.topic = topic
        self.prompt = prompt
        self.is_person = is_person
        self.prompt_start = f"""现正在进行辩题为：{self.topic} 的辩论赛。
你是辩论赛{self.side}的成员，当前持方立场：{self.position}
发言要求：
1. 使用口语化表述
2. 不解释思考过程
3. 每个论点必须包含具体案例或数据
4. 科学严谨、简洁清晰"""

    def speak(self, message):
        content = f"{self.side}{self.name}:\n {message}"
        print(content)
        return content

    def debate(self, stage, action_type):
        """辩手进行辩论发言"""
        # 生成动态提示部分
        context_prompt = f"""
        当前阶段：{stage}
        当前任务：{action_type}

        历史发言摘要：
        {self.recoder.summarize_records() or "暂无历史发言"}

        补充指引：
        {self.prompt or "请根据持方立场展开论述"}"""
        debater_prompt = self.prompt_start + context_prompt
        message = self.interact_with_llm(debater_prompt)
        self.recoder.record(stage=stage, speaker=self.name, content=message, side=self.side)
        return self.speak(message)


class HumanDebater(Agent):
    def __init__(self, name, side, recorder: DebateRecorder, position=""):
        super().__init__(name, recorder)
        self.side = side
        self.action_type = ""
        self.position = position
        self.stage = ""

    def add_record(self, message):
        self.recoder.record(stage=self.stage, speaker=self.name, content=message, side=self.side)
